package com.atqinke.designpattern.structuraltype.proxy.cglib_factory;

import org.springframework.cglib.proxy.Enhancer;
import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * @BelongsProject: BasicConnection
 * @BelongsPackage: com.atqinke.DesignPattern.structuraltype.proxy.cglib_factory
 * @Author: NieHk
 * @CreateTime: 2022-08-26  15:24
 * @Description: 生产代理对象
 * @Version: 1.0
 */
public class proxyFactory implements MethodInterceptor {
//    private Cinema cinema = new Cinema();

    public Cinema getProxyFactory(){
        //创建Enhancer对象，类似于JDK动态代理的Proxy类
        Enhancer enhancer =new Enhancer();
        //设置父类的字节码对象
        enhancer.setSuperclass(Cinema.class);
        //设置回调函数
        enhancer.setCallback(this);
        //创建代理对象
        Cinema obj = (Cinema) enhancer.create();
        return obj;
    }
    /*
        intercept方法参数说明：
            o ： 代理对象
            method ： 真实对象中的方法的Method实例
            args ： 实际参数
            methodProxy ：代理对象中的方法的method实例
     */
    @Override
    public Cinema intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("收服务费");
        //        method.invoke(cinema,objects);
        Cinema cinema = (Cinema) methodProxy.invokeSuper(o, objects);
        return cinema;
    }
}
